/*
Problem Id:1010  User Id:tq 
Memory:80K  Time:62MS
Language:C++  Result:Accepted

    author: TangQiao @ Wind 

	problem name: Arbitrage

	source : ULM 1996

	problem type: 图论 图的最短路径算法的灵活运用
	problem description: 给出N种钱币之间的汇率,问你是否存在一种方式,可以通过钱币之间的相互兑换，
					     最后使钱币值增加。
	problem solution: 本题实际是在一个有向图中找出一个从i点到i点的最大路径。PS：路径之间的权值
					  用乘而不是用加.
	award & note :  从来没有想过FLODY的最短路径算法竟可以用来算最大值.
				    通过这道题,我更加理解了floyd算法的意义.其实floyd算法和动态规划一样,只是一种
					思想.很多题目,只要思路一样,同样可以用floyd算法来解决.

	another solution: 唐福林同学居然用搜索做出了此题.实在是够强.
					  他的剪枝方法是: 同样是找环.但是,因为我们找的是环 whose 所有的边乘起来大于1.
					  所以如果这样的环存在,那么这样的环必定至少有一条边的权值大于1.
					  他的程序规定只从那些权值大于1的边开始深度搜索.并且,当搜索到当前的累积权值小
					  于1时,就不再往下搜了.
					  这样剪枝强的地方在于: 因为找到一条大于1的环即可break,所以最难的调试数据很
					  可能是没有边大于1,一般的搜索方法你必须把整个图找一遍.用他的方法对于这种情况
					  几乎不费时间.

	date : 2005.5.20 北师大校队个人选拨赛1


*/
#include <stdio.h>
#include <string.h>
#include <math.h>

char name[32][124];

double tu[32][32];
int n;
int bian;
int yes;

int getnum(char *s)
{
	int i;
	for (i=1;i<=n;i++)
		if (strcmp(s,name[i])==0)
			return i;
	printf("error!\n");
	return 0;
}

void init()
{
	int i; 
	int a, b;
	double val;
	char s1[124],s2[124];
	
	memset(tu, 0, sizeof(tu));


	for (i=1; i<=n; i++)
		scanf("%s", name[i]);

	scanf("%d", &bian);
	for (i=1; i<=bian; i++)
	{
		scanf("%s %lf %s", s1, &val, s2);
//		printf("gets: %s %s\n",s1,s2);
		a=getnum(s1);
		b=getnum(s2);
		tu[a][b]=val;
	}

//output for check
/*	for (i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
			printf("%5.2lf",tu[i][j]);
		printf("\n");
	}
*/
}


void floyd()
{
	int i,j,k;
	for (k=1; k<=n; k++)
	{
		for (i=1; i<=n; i++)
			for (j=1; j<=n; j++)
			{
				if (tu[i][k]*tu[k][j] > tu[i][j]) 
				{
					tu[i][j]=tu[i][k]*tu[k][j];
				}
			}
	}
}


int checkyes()
{
	for (int i=1; i<=n; i++)
		if (tu[i][i]-1 > 1e-6)
			return 1;
	return 0;
}

main()
{
	int icase;
	icase=0;
	while (1)
	{
		scanf("%d", &n);
		if (n==0) break;
		icase++;
		init();		
		yes=0;

		floyd();
		yes=checkyes();

		if (yes) printf("Case %d: Yes\n", icase);
		else  printf("Case %d: No\n", icase);

		
	}



	return 0;
}
